package bender.appl.io;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import org.joone.engine.NetErrorManager;
import org.joone.exception.JooneRuntimeException;
import org.joone.io.FileInputSynapse;
import org.joone.io.StreamInputSynapse;
import org.joone.log.ILogger;
import org.joone.log.LoggerFactory;

/**
 *
 * Generar la entrada a partir del archivo de texto de 0 y 1
 * @author Ramiro
 */
public class ArchivoBinarioInputSynapse extends StreamInputSynapse {

    /**
     * Serialización. Evita warnings
     */
    private static final long serialVersionUID = 651324503195211094L;
    /**
     * Logger
     */
    private static final ILogger log = LoggerFactory.getLogger(FileInputSynapse.class);
    /**
     * Nombre del archivo asociado
     */
    private String fileName = "";
    /**
     * Archivo asociado
     */
    private transient File inputFile;

    public ArchivoBinarioInputSynapse(String fileName) {
        super();
        this.fileName = fileName;

    }

    /**
     * Método que pide el framework que se sobreescriba,
     * inicializa el stream de arranque y delimita tokens
     * @throws org.joone.exception.JooneRuntimeException
     */
    @Override
    protected void initInputStream() throws JooneRuntimeException {
        if ((fileName != null) && (!fileName.equals(new String("")))) {
            try {
                inputFile = new File(fileName);
                FileInputStream fis = new FileInputStream(inputFile);
                ArchivoBinarioTokenizer tokenizer;
                if (getMaxBufSize() > 0) {
                    tokenizer = new ArchivoBinarioTokenizer(new InputStreamReader(fis), getMaxBufSize());
                } else {
                    tokenizer = new ArchivoBinarioTokenizer(new InputStreamReader(fis));
                }
                super.setTokens(tokenizer);
            } catch (IOException ioe) {
                String error = "IOException in " + getName() + ". Message is : ";
                log.warn(error + ioe.getMessage());
                if (getMonitor() != null) {
                    new NetErrorManager(getMonitor(), error + ioe.getMessage());
                }
            }
        }
    }

    public String getFileName() {
        return this.fileName;
    }

    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
}
